package gef.tutorial.step.app;

import org.eclipse.jface.action.ICoolBarManager;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.swt.SWT;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;

import gef.tutorial.step.action.DiagramAction;

public class ApplicationActionBarAdvisor extends ActionBarAdvisor {

	
	private IWorkbenchAction exitAction;
	private IWorkbenchAction aboutAction;
	private DiagramAction diagramAction;
	
	
	public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
		super(configurer);
	}

	
	/**
	 * 1.注册菜单或者工具栏的Action。Action只有注册后才能添加到菜单中。
	 * 
	 */
	@Override
	protected void makeActions(IWorkbenchWindow window) {
		//退出
		exitAction = ActionFactory.QUIT.create(window);
		register(exitAction);
		
		//关于
		aboutAction = ActionFactory.ABOUT.create(window);
		register(aboutAction);
		
		//绘图
		diagramAction = new DiagramAction(window);
		register(diagramAction);

	}

	

	/**
	 * 2.填充菜单栏。用Action来填充菜单
	 * 
	 *  (1) 菜单管理器负责管理菜单项、设置菜单行为、创建级联菜单或者对菜单项进行分组。
	 *  (2) MenuManager构造函数：菜单项文本、菜单项ID
	 *  (3) new Separator() 为一条分割线
	 */
	@Override
	protected void fillMenuBar(IMenuManager menuBar) {
		//（1）一级菜单  File
		MenuManager fileMenuManager= new MenuManager("File", "fileMenuManager");
		//加入绘图动作，是叶子节点菜单，也是二级菜单。点击之后将执行Action的run方法
		fileMenuManager.add(diagramAction);
		//加入分隔符
		fileMenuManager.add(new Separator());
		//加入退出动作
		fileMenuManager.add(exitAction);
		
		//（2）一级菜单  Help
		MenuManager helpMenuManager = new MenuManager("Help", "helpMenuManager");
		helpMenuManager.add(aboutAction);
		//加入二级菜单
		helpMenuManager.add(fileMenuManager);
		
		//（3）将菜单加入菜单栏
		menuBar.add(fileMenuManager);
		menuBar.add(helpMenuManager);

	}
	
	


	/**
	 * 3.填充工具栏。用Action来填充工具栏
	 * (1) 工具栏默认是不显示。在 ApplicationWorkbenchWindowAdvisor 类中的
	 *  preWindowOpen方法中有一句 configurer.setShowCoolBar(false);将false改为true即可显示工具栏
	 * (2) 工具栏管理器负责工具栏的分类管理
	 * (3) SWT.FLAT将工具栏设置成平滑方式，SWT.SHADOW_OUT用于在工具栏和菜单栏之间加一条分割线
	 * 
	 */
	@Override
	protected void fillCoolBar(ICoolBarManager coolBar) {
		//1.生成工具栏
		ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT | SWT.SHADOW_OUT);
		
		//2.将工具放入工具栏
		toolBarManager.add(diagramAction);
		
		
		//3.将工具栏放入 
		coolBar.add(toolBarManager);
	}

	
}
